package com.springboot.test.service;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.springboot.test.common.utils.DelayTask;
import com.springboot.test.common.utils.IdGenerator;
import com.springboot.test.entity.NoticeEntity;
import com.springboot.test.entity.mapper.NoticeMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@Service
@Slf4j
public class NoticeService extends ServiceImpl<NoticeMapper, NoticeEntity> {

    @Resource
    private MessageService messageService;

    @Resource
    private ScheduledThreadPoolExecutor scheduledThreadPoolExecutor;

    public Boolean addNotice(NoticeEntity noticeEntity) {
        noticeEntity.setMessageCode(IdGenerator.getNewId("N"));
        if(0==noticeEntity.getType()){
            noticeEntity.setSendTime(new Date());
            messageService.sendMessageToEveryOne(noticeEntity.getTitle(), noticeEntity.getMessage());
            noticeEntity.setSendStatus(1);
        }else{
            if(noticeEntity.getSendTime().after(new Date())){
                scheduledThreadPoolExecutor.schedule(()->{
                    messageService.sendMessageToEveryOne(noticeEntity.getTitle(), noticeEntity.getMessage());
                    noticeEntity.setSendStatus(1);
                    update(noticeEntity,new UpdateWrapper<NoticeEntity>().lambda().eq(NoticeEntity::getMessageCode,noticeEntity.getMessageCode()));
                    log.info("定点任务执行"+"  "+new Date());
                },(noticeEntity.getSendTime().getTime()-new Date().getTime()), TimeUnit.MILLISECONDS);
            }
        }
        save(noticeEntity);
        return Boolean.TRUE;
    }
}
